package com.system.mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;
/**
 基础数据库操作类
 @author 郝威 */
@Repository
public interface BaseDAO{
	/**
	 添加对象
	 @param obj Object
	 @return Object
	 @exception Exception Exception
	 */
	Object insert(Object obj) throws Exception;
	/**
	 修改对象
	 @param obj Object
	 @exception Exception Exception
	 */
	void update(Object obj) throws Exception;
	/**
	 删除对象
	 @param obj Object
	 @exception Exception Exception
	 */
	void delete(Object obj) throws Exception;
	/**
	 根据主键获取对象
	 @param id Object
	 @return Object
	 */
	Object selectById(@Param("id") Integer id);
	/**
	 根据object获取对象
	 @param object object
	 @return Object
	 */
	Object selectByObject(Object object);
	/**
	 根据公司id查询单个对象
	 @param companyId companyId
	 @return Object
	 */
	Object selectByCompanyId(Integer companyId);
	/**
	 根据公司id查询
	 @param companyId sql
	 @return List<?>
	 */
	List<?> selectListByCompanyId(Integer companyId);
	/**
	 自定义sql查询多条
	 @param sql sql
	 @return List<Map>
	 */
	List<Map> selectListBySql(@Param("sql") String sql);
	/**
	 自定义sql查询多条
	 @param sql sql
	 @return List<Map>
	 */
	List<Map<Object, Object>> selectObjListBySql(@Param("sql") String sql);
	/**
	 自定义sql查询单个
	 @param sql sql
	 @return Map
	 */
	Map selectBySql(@Param("sql") String sql);
	/**
	 自定义sql查询单个
	 @param sql sql
	 @return Map
	 */
	Map<Object, Object> selectObjBySql(@Param("sql") String sql);
	/**
	 自定义sql更新
	 @param sql sql
	 @return Integer
	 */
	Integer updateSql(@Param("sql") String sql);
	/**
	 自定义sql更新
	 @param sql sql
	 @return Integer
	 */
	Integer deleteSql(@Param("sql") String sql);
	/**
	 初始化微信短信系统启动
	 */
	void initWeixinShortSystemStart();
	/**
	 初始化微信短信过凌晨
	 */
	void initWeixinShortNextDay();
}
